package thread;

//懒汉模式
//当要使用对象的时候才去创建
public class SingletonLazy {
    private volatile SingletonLazy instance; //避免指令重排序出现某个线程获取到还没有初始化的对象。
    private Object locker = new Object();

    //私有化的构造方法让外界不能实例化多个对象
    private SingletonLazy() {}

    public SingletonLazy getInstance() {
        if(instance == null) {
            synchronized (locker) { //避免加锁频繁导致性能下降，先判断
                if (instance == null) {  //避免线程不安全，加锁
                    instance = new SingletonLazy();
                }
            }
        }
        return instance;
    }
}
